# user-service/src/user_service/crud.py（同步版）
from sqlalchemy.orm import Session  # 替换 AsyncSession，用同步 Session
from . import models, schemas
# 先安装 hashlib（Python 内置，无需额外安装）
import hashlib

def get_password_hash(password: str) -> str:
    """加密密码：SHA-256 哈希（固定长度）"""
    # 用 SHA-256 哈希密码（输出固定32字节，避免长度问题）
    password_hash = hashlib.sha256(password.encode("utf-8")).hexdigest()
    return password_hash

# 1. 创建用户（async def → def，删除 await）
def create_user(db: Session, user: schemas.UserCreate):  # db 类型换 Session
    db_user = models.User(
        username=user.username,
        email=user.email,
        full_name=user.full_name,
        hashed_password=get_password_hash(user.password)
    )
    db.add(db_user)
    db.commit()  # 同步提交，去掉 await
    db.refresh(db_user)  # 同步刷新，去掉 await
    return db_user

# 2. 通过ID查询用户（同步查询：用 db.query() 替代 select + execute）
def get_user(db: Session, user_id: int):
    # 同步写法：直接链式调用 query + filter + first()
    return db.query(models.User).filter(models.User.id == user_id).first()

# 3. 通过邮箱查询用户（同上）
def get_user_by_email(db: Session, email: str):
    return db.query(models.User).filter(models.User.email == email).first()

# 4. 查询用户列表（分页，同步写法）
def get_users(db: Session, skip: int = 0, limit: int = 100):
    return db.query(models.User).offset(skip).limit(limit).all()  # 去掉 await

# 5. 更新用户信息（同步化）
def update_user(
    db: Session, 
    user_id: int, 
    user_update: schemas.UserUpdate
):
    # 同步查询用户
    db_user = db.query(models.User).filter(models.User.id == user_id).first()
    if not db_user:
        return None
    
    # 更新字段（逻辑不变，去掉 await）
    update_data = user_update.model_dump(exclude_unset=True)
    for key, value in update_data.items():
        if key == "password":
            value = get_password_hash(value)
        setattr(db_user, key, value)
    
    db.commit()  # 同步提交
    db.refresh(db_user)  # 同步刷新
    return db_user